#!/bin/bash
# koska BASH:issa ei ole kaksiulotteista matriisia täytyy se kuvata yksiulotteisessa matriisissa. Tavallisesti tämä kuvaaminen tehdään siten että kerrotaan kolmiulotteisen matriisin sarakeluku jonka perusteella kaksiulotteinen matriisi täytetään rivi kerrallaan. 
function tulosta_matriisi () {
for n in $(eval echo -e \${$1[*]\n}§); do echo -ne ${n/§/\\n}' '; done | column -t  
}

function kirjoita_matriisi_levylle () { 
eval echo  \${$1[@]} > ~/tiedosto1   # Matriisin $1 jäsenten arvot   
eval echo \${!$1[*]} > ~/tiedosto2   # Matriisin $1 jäsenten osoitteet
}

function lue_matriisi_levyltä () { 
unset $1 # varmistus sille että matriisi tosiaan luetaan levyltä
apu0=0
apu1=($(cat  ~/tiedosto1))
apu2=($(cat  ~/tiedosto2))
while true; do
  [[ -z ${apu1[$apu0]} ]] && break  
  eval "$1[${apu2[apu0]}]"="${apu1[apu0]}" 
  let apu0++
done
unset apu0 apu1 apu2  
}

a=(sin17 .2 3§.4 .5 6e8§ -7 8*8 ¤1) # yksi menetelmä kaksiulotteisen matriisin kirjoittamiseksi sillä Linuxissahan ei selaista ole
                                     # siis §:llä merkitään että siirrytään täyttämään seuraavaa riviä. Nuo funktiot ja käskyt ovat mukana
                                     # siksi että näkee voiko niitä liittää mukaan - funktiot ratkaistaan toisaalla.
kirjoita_matriisi_levylle a

lue_matriisi_levyltä a
tulosta_matriisi a
